package com.hyt.it.ogt.kq.service.gov.service;

import java.io.IOException;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.service.gov.model.entity.BreakRuleScheme;
import com.hyt.it.ogt.kq.service.gov.model.vo.BreakInfoVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.BreakRuleBehaviorVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.SchemeListVO;
import com.hyt.model.PageParam;

/**
 * <p>
 * 违纪处理表 服务类
 * </p>
 *
 * @author huangyh
 * @since 2021-03-08
 */
public interface IBreakRuleSchemeService extends IService<BreakRuleScheme> {

    /**
     * 违纪信息导入
     * @param file
     * @param taskId
     * @throws IOException
     */
    void importExcel(MultipartFile file, String taskId) throws IOException;

    /**
     * 通过考试任务id查询所有违纪信息
     *
     * @param taskId 考试任务id
     * @return 违纪信息
     */
    BreakInfoVO queryAll(String taskId);

    /**
     * 删除违纪处理方法
     *
     * @param ids    违纪处理方法ids
     * @param taskId 考试任务id
     */
    void deleteScheme(String ids, String taskId);

    /**
     * 查询违纪处理方法下拉列表
     *
     * @param taskId 考试任务id
     * @return 违纪处理方法下拉列表
     */
    List<SchemeListVO> queryScheme(String taskId);

    /**
     * 新增违纪处理方法
     *
     * @param param 违纪处理方法参数
     */
    void addScheme(BreakRuleScheme param);

    /**
     * 修改违纪处理方法
     *
     * @param param 违纪处理方法参数
     */
    void updateScheme(BreakRuleScheme param);

    /**
     * 默认初始化违纪信息数据
     * @param taskId
     * @param officeId
     */
    void initBreakRuleSchemeFromOffice(String taskId, String officeId);

    /**
     * 查询违纪行为信息列表
     *
     * @param pageParam
     * @param taskId
     * @param key 内容或code模糊查询
     * @return
     */
    Page<BreakRuleBehaviorVO> selectPageBreakRuleBehavior(PageParam<BreakRuleBehaviorVO> pageParam, String taskId,
                                                          String key);

    /**
     * 查询违纪处理方法列表
     *
     * @param pageParam
     * @param taskId
     * @param key
     * @return
     */
    Page<BreakRuleScheme> selectPageBreakRuleScheme(PageParam<BreakRuleScheme> pageParam, String taskId, String key);

    /**
     * 检查编码是否符合规则
     *
     * @param code
     * @return
     */
    boolean checkCode(String code);

    /**
     * 根据考试任务id获取违纪处理数据
     * @param taskId 考试任务id
     * @return 违纪处理数据
     */
    List<BreakRuleScheme> listByTaskId(String taskId);

}
